import time
import random

'''
定义：
'''
#将以下函数定义复制到你的 Python 脚本里（可以放在文件开头，方便全局调用）
def generate_unique_filename(
        prefix: str = "file",
        suffix: str = ".txt",
        random_digits: int = 3
) -> str:
    """
    生成包含精确时间（到毫秒）和随机数的唯一文件名，适用于高频自动化场景。

    参数:
        prefix: 文件名前缀（字符串，默认值："file"）
                示例："log"、"data"、"output"
        suffix: 文件后缀（字符串，默认值：".txt"）
                需包含前缀点，示例：".csv"、".json"、".log"
        random_digits: 随机数位数（整数，默认值：3）
                范围建议 2-6，位数越多重复概率越低

    返回:
        str: 唯一文件名字符串，格式为：
            "{prefix}_{YYYYMMDD}_{HHMMSS}_{毫秒}_{随机数}{suffix}"

    示例:
        generate_unique_filename() → "file_20251112_164530_123_456.txt"
        generate_unique_filename("log", ".log", 4) → "log_20251112_164530_123_7890.log"
    """
    # 1. 获取时间戳（精确到毫秒）
    current_time = time.time()  # 时间戳（秒级，带小数）
    date_str = time.strftime("%Y%m%d", time.localtime(current_time))  # 年月日
    time_str = time.strftime("%H%M%S", time.localtime(current_time))  # 时分秒
    milliseconds = int((current_time - int(current_time)) * 1000)  # 提取毫秒（0-999）

    # 2. 生成指定位数的随机数
    min_random = 10 ** (random_digits - 1)  # 最小随机数（如3位→100）
    max_random = (10 ** random_digits) - 1  # 最大随机数（如3位→999）
    random_num = random.randint(min_random, max_random)

    # 3. 拼接文件名
    return f"{prefix}_{date_str}_{time_str}_{milliseconds:03d}_{random_num}{suffix}"


'''
使用示例（生成文件名）

通过参数自定义文件名格式，示例如下：
'''
# 示例1：默认参数（前缀"file"，后缀".txt"，3位随机数）
filename1 = generate_unique_filename()
print(filename1)  # 输出示例：file_20251112_165022_456_789.txt

# 示例2：自定义前缀和后缀（日志文件）
filename2 = generate_unique_filename(prefix="app_log", suffix=".log")
print(filename2)  # 输出示例：app_log_20251112_165022_456_123.log

# 示例3：增加随机数位数（适用于超高频率场景）
filename3 = generate_unique_filename(prefix="data", suffix=".csv", random_digits=4)
print(filename3)  # 输出示例：data_20251112_165022_456_5678.csv


'''
之后，用该文件名，创建文件：
'''
# 生成CSV文件名
csv_filename = generate_unique_filename(prefix="report", suffix=".csv")

# 创建并写入文件
with open(csv_filename, "w", encoding="utf-8") as f:
    f.write("col1,col2,col3\n")
    f.write("1,2,3\n")







'''
注意事项
1.重复概率：毫秒级时间（1 毫秒 = 0.001 秒）+ 随机数，可确保每秒最多支持 10^random_digits * 1000 个文件（如 3 位随机数→100 万 / 秒），完全满足高频自动化需求。
2.参数规范：suffix 必须包含前缀点（如 .txt 而非 txt），否则文件名会缺少分隔符。
3.兼容性：函数基于 Python 标准库（time、random），无需额外安装依赖，兼容 Python 3.6+。
按照上述方式使用，即可稳定生成唯一文件名，适配你的自动化流程。
'''